﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Lavanderia.BL;
using Lavanderia.Entities;
using Microsoft.Practices.Unity;

namespace Lavanderia.UI
{
    public partial class FrmEmpresa : Form
    {
        [Dependency]
        public IEmpresaBL empresaBL { get; set; }
        [Dependency]
        public IUsuarioMenuBL usuMenuBL { get; set; }
        public FrmEmpresa()
        {
            InitializeComponent();
            this.BuilUp();
        }
        public USUARIO currentUsuarioEmpresa {get; set; }
        private void FrmEmpresa_Load(object sender, EventArgs e)
        {
            cargaData();
        }

        private void btnBuscarJuridico_Click(object sender, EventArgs e)
        {
            cargaData();
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            var frmttHotel = new FrmMttoEmpresa();
            frmttHotel.NuevaEmpresa();
            frmttHotel.ShowDialog();
            cargaData();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            var empresa = empresaBindingSource.Current as Empresa;

            if (empresa != null)
            {
                var frmMttoHotel = new FrmMttoEmpresa();
                frmMttoHotel._empresa = empresa;
                frmMttoHotel.EditEmpresa();
                frmMttoHotel.ShowDialog();
                cargaData();
            }
            else
            {
                MessageBox.Show("Debe seleccionar una empresa.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            var empresa = empresaBindingSource.Current as Empresa;
            if (empresa != null)
            {
                if (empresa.Id == 1)
                {
                    MessageBox.Show("No se puede Eliminar la Empresa", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    var rpt = MessageBox.Show(this,
                        string.Format("¿Desea Eliminar la Empresa: " + empresa.RazonSocial + "?"),
                        "Mensaje",
                        MessageBoxButtons.YesNo,
                        MessageBoxIcon.Question);
                    if (rpt == DialogResult.Yes)
                    {
                        empresaBL.RemoveEmpresa(empresa.Id);
                        cargaData();
                    }
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar una empresa.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        public void menuLlena()
        {
            var datoUsuario = usuMenuBL.GetAllFromUsuarioByPersonaFromLogin(currentUsuarioEmpresa.TRABAJADOR.Dni);

            var permisos = (from c in usuMenuBL.GetAllFromUsuarioMenuByMenuId(datoUsuario.IdUsuario)
                            select c.MENU.Tag.ToString()).ToArray();

            System.Windows.Forms.Button[] botones = new System.Windows.Forms.Button[] { 
            this.btnNuevo,this.btnEditar,this.btnEliminar};

            //obtengo todos los PERMISOS NO ASIGNADOS al usuario
            var noVisible = from nv in botones
                            where !permisos.Contains(nv.Tag.ToString())
                            select nv;

            //coloco DESABILITADO a los permisos no asignados
            noVisible.ToList().ForEach(nv => nv.Enabled = false);

            cargaData();
        }
        public void cargaData()
        {
            var criterio = TxtCriterio.Text == string.Empty ? null : TxtCriterio.Text;

            empresaBindingSource.DataSource = empresaBL.GetFromEmpresasByCriterio(criterio);
        }

        private void TxtCriterio_KeyPress(object sender, KeyPressEventArgs e)
        {
               var amberson = Convert.ToString("&");
                var par1 = Convert.ToString("(");
                var par2 = Convert.ToString(")");
                var punto = Convert.ToString(".");
                var guion = Convert.ToString("-");
                var coma = Convert.ToString(",");


                string cadena = amberson + par1 + par2 + punto + guion + coma;

                if (Char.IsLetter(e.KeyChar) || cadena.Contains(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsSeparator(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            
            
        }
    }
}
